//
//  EmoticonManager.swift
//  01-keyBoard
//
//  Created by Leon on 15/10/23.
//  Copyright © 2015年 Leon. All rights reserved.
//

import UIKit
/**
1. emoticons.plist 定义表情包数组
packages 字典数组中，每一个 id 对应不同表情包的目录
2. 从 每一个表情包目录中，加载 info.plist 可以获得不同的表情内容
id	目录名
group_name_cn	表情分组名称- 显示在 toolbar 上
emoticons	 数组
字典
chs		发送给服务器的字符串
png		在本地显示的图片名称
code	emoji 的字符串编码
*/

// MARK: - 表情包管理者 - emoticon.plist
class EmoticonManager {
    
    /// 单例
    static let shareManager = EmoticonManager()
    
    /// 数据包数组
    var packages = [EmoticonPackageModel]()

    private init() {
        
        // 0 插一组最近
        packages.append(EmoticonPackageModel(dict: ["group_name_cn": "最近"]))
        
        // 1 加载emotions.plist文件路径 --> 如果文件不存在，为nil
        let path = NSBundle.mainBundle().pathForResource("emoticons.plist", ofType: nil, inDirectory: "Emoticons.bundle")!
        
        // 2 加载字典
        let dict = NSDictionary(contentsOfFile: path) as! [String: AnyObject]
        
        // 3 加载数组 & 利用KVC取出 id数组
        let array = dict["packages"]!.valueForKey("id")
        
        // 4 遍历数组 准备加载info.plist
        for id in array as! [String] {
            
            loadInfoPlist(id)
        }
    }
    
    ///  加载 info.plist
    private func loadInfoPlist(id: String) {
        
        // 1 加载 info.plist 文件路径
        let path = NSBundle.mainBundle().pathForResource("info", ofType: ".plist", inDirectory: "Emoticons.bundle/\(id)")!
        
        // 2 加载字典
        let dict = NSDictionary(contentsOfFile: path) as! [String: AnyObject]
        
        // 3 字典转模型
        packages.append(EmoticonPackageModel(dict: dict))
        
    }
    
    /// 添加喜爱表情
    func addFavorite(em: EmoticonModel) {
        
        em.times++
        
        // 取出最近表情包
        var ems = packages[0].emoticons
        
        // 判断最近分组是否包含此表情
        if !ems.contains(em) {
            
            // 插入表情
            ems.insert(em, atIndex: 0)
            // 删除倒数第二个按钮(到处第一个是删除按钮)
            ems.removeAtIndex(ems.count - 2)
        }
        
        // 排序
        ems.sortInPlace { $0.times > $1.times }
//        ems.sortInPlace { (em1, em2) -> Bool in
//            em1.times > em2.times
//        }
        
        packages[0].emoticons = ems
        
    }
}












